﻿using System;
using System.Collections.Generic;
using System.Text;

namespace TeaCompiler.CodeDom {
    public static class ModifierInfo {

        /// <summary>
        /// 获取标识符的名字。
        /// </summary>
        /// <param name="type"></param>
        /// <returns></returns>
        public static string GetName(this Modifier type) {

            if (type == Modifier.None) {
                return String.Empty;
            }

            StringBuilder sb = new StringBuilder();

            if ((type & Modifier.Public) != Modifier.None) {
                sb.Append("public ");
            } else if ((type & Modifier.Protected) != Modifier.None) {
                sb.Append("protected ");

                if ((type & Modifier.Internal) != Modifier.None) {
                    sb.Append("internal ");
                }
            } else if ((type & Modifier.Private) != Modifier.None) {
                sb.Append("private ");
            } else if ((type & Modifier.Internal) != Modifier.None) {
                sb.Append("internal ");
            }

            if ((type & Modifier.Final) != Modifier.None) {
                sb.Append("final ");
            } else if ((type & Modifier.Const) != Modifier.None) {
                sb.Append("const ");
            } else if ((type & Modifier.Once) != Modifier.None) {
                sb.Append("once ");
            }

            if ((type & Modifier.Static) != Modifier.None) {
                sb.Append("static ");
            } else if ((type & Modifier.Virtual) != Modifier.None) {
                sb.Append("virtual ");
            } else if ((type & Modifier.Abstract) != Modifier.None) {
                sb.Append("abstract ");
            } else if ((type & Modifier.Override) != Modifier.None) {
                sb.Append("override ");
            }

            sb.Length--;

            return sb.ToString();
        }

    }
}
